package com.wxk.lambda.syntax;

import com.wxk.lambda.interfaces.LambdaNoneReturnMultipleParameter;
import com.wxk.lambda.interfaces.LambdaNoneReturnSingleParameter;
import com.wxk.lambda.interfaces.LambdaSingleReturnMultipleParameter;
import com.wxk.lambda.interfaces.LambdaSingleReturnNoneParameter;

/**
 * wxk
 */
public class Syntax2 {

    public static void main(String[] args) {

        //语法精简
        // 1.参数
        // 由于在接口的抽象方法中，已经定义了参数的数量和类型。所以在Lambda表达式中，参数的类型可以省略
        //备注：如果需要省略类型，则每一个参数的类型都要省略。千万不要出现一个参数省略，一个参数不省略
        LambdaNoneReturnMultipleParameter lambda1 = (a, b) -> {
            System.out.println("lambda1 hello world!");
        };
        lambda1.test(2, 3);

        // 2.参数小括号
        //如果参数列表中，参数的数量只有一个。此时小括号可以省略
        LambdaNoneReturnSingleParameter lambda2 = a -> {
            System.out.println("lambda2 hello world!");
        };
        lambda2.test(2);

        // 3.方法大括号
        //如果方法体中只有一条语句，此时大括号可以省略
        LambdaNoneReturnSingleParameter lambda3 = a -> System.out.println("lambda3 hello world:a=" + a);
        lambda3.test(2);

        // 4.如果方法体中唯一的一条语句是一个返回语句,则在省略掉大阔号的同事，也不行省略return
        LambdaSingleReturnNoneParameter lambda4 = () -> 10;
        int ret1 = lambda4.test();
        System.out.println("lambda4:ret1=" + ret1);

        // 5.类型、方法体、return 关键字都省略了
        LambdaSingleReturnMultipleParameter lambda5 = (a, b) -> a + b;
        int ret2 = lambda5.test(10, 20);
        System.out.println("lambda5:ret2=" + ret2);


    }
}
